﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Domain;
using DAO;

public partial class EmpAnalisisConsumos : System.Web.UI.Page
{
    protected string data
    {
        get;
        set;
    }

    protected void Page_Load(object sender, EventArgs e)
    {

        data = string.Empty;
        Empresa emp = (Empresa)Utils.operadorLogueado;

        #region Publicaciones

        Dictionary<string, long> seguimiento_publicaciones, uso_publicaciones;
        EmpresaDAO.GetStatisticsPublicaciones(emp.UserName, out uso_publicaciones, out seguimiento_publicaciones);
        
        bind_seguimiento_publicaciones(seguimiento_publicaciones);
        bind_uso_publicaciones(uso_publicaciones);

        #endregion

        #region Asociaciones

        long asociaciones_semana, asociaciones_mes, 
        asociaciones_anio, asociaciones_total,
        desasociaciones_semana, desasociaciones_mes,
        desasociaciones_anio, desasociaciones_total;

        Dictionary<string, long> asociaciones_semana_drill,asociaciones_mes_drill, 
                                 asociaciones_anio_drill, asociaciones_total_drill, 
                                 desasociaciones_semana_drill, desasociaciones_mes_drill, 
                                 desasociaciones_anio_drill, desasociaciones_total_drill;

        EmpresaDAO.GetStatisticsAsociaciones(emp.UserName, out asociaciones_semana, out asociaciones_semana_drill, 
                                                    out asociaciones_mes, out asociaciones_mes_drill,
                                                    out asociaciones_anio, out asociaciones_anio_drill, 
                                                    out asociaciones_total, out asociaciones_total_drill,
                                                    out desasociaciones_semana, out desasociaciones_semana_drill,
                                                    out desasociaciones_mes,out  desasociaciones_mes_drill,
                                                    out desasociaciones_anio, out desasociaciones_anio_drill, 
                                                    out desasociaciones_total, out desasociaciones_total_drill);
        bind_desasociaciones_empresa(desasociaciones_semana, desasociaciones_semana_drill, 
                                     desasociaciones_mes, desasociaciones_mes_drill, 
                                     desasociaciones_anio, desasociaciones_anio_drill, 
                                     desasociaciones_total, desasociaciones_total_drill);
        bind_asociaciones_empresa(asociaciones_semana, asociaciones_semana_drill,
                                  asociaciones_mes, asociaciones_mes_drill,
                                  asociaciones_anio, asociaciones_anio_drill,
                                  asociaciones_total, asociaciones_total_drill);

        #endregion

    }

    private void bind_asociaciones_empresa(long semana, Dictionary<string, long> semana_drill,
                                           long mes, Dictionary<string, long> mes_drill,
                                           long anio, Dictionary<string, long> anio_drill,
                                           long total, Dictionary<string, long> total_drill)
    {

        string categories_semana = string.Empty;
        string values_semana = string.Empty;

        foreach (var i in semana_drill)
        {
            if (string.IsNullOrEmpty(categories_semana))
            {
                categories_semana += "'" + i.Key + "'";
                values_semana += i.Value.ToString();
            }
            else
            {
                categories_semana += ",'" + i.Key + "'";
                values_semana += "," + i.Value.ToString();
            }
        }

        string categories_mes = string.Empty;
        string values_mes = string.Empty;

        foreach (var i in mes_drill)
        {
            if (string.IsNullOrEmpty(categories_mes))
            {
                categories_mes += "'" + i.Key + "'";
                values_mes += i.Value.ToString();
            }
            else
            {
                categories_mes += ",'" + i.Key + "'";
                values_mes += "," + i.Value.ToString();
            }
        }

        string categories_anio = string.Empty;
        string values_anio = string.Empty;

        foreach (var i in anio_drill)
        {
            if (string.IsNullOrEmpty(categories_anio))
            {
                categories_anio += "'" + i.Key + "'";
                values_anio += i.Value.ToString();
            }
            else
            {
                categories_anio += ",'" + i.Key + "'";
                values_anio += "," + i.Value.ToString();
            }
        }

        string categories_total = string.Empty;
        string values_total = string.Empty;

        foreach (var i in total_drill)
        {
            if (string.IsNullOrEmpty(categories_total))
            {
                categories_total += "'" + i.Key + "'";
                values_total += i.Value.ToString();
            }
            else
            {
                categories_total += ",'" + i.Key + "'";
                values_total += "," + i.Value.ToString();
            }
        }

        data +=
            "dataArray.push(" +
            "{ " +
                "type: 'column', " +
                "container: 'asociaciones_empresa'," +
                "title: 'Asociaciones a la empresa <span class=\"tooltip\" alt=\"Aquí se muestran los nuevos seguidores tuvo la empresa en distintos períodos. &lt;br /&gt;Podés ver como estos están compuestos para analizarlos mejor haciendo click en un período en particular\">?</span>'," +
                "categories : ['Semana', 'Mes', 'Año', 'Total']," +
                "name: 'Asociaciones'," +
                "data : [" +
                    "{y: " + semana.ToString() + "," +
                    "color: colors[0], " +
                    "drilldown: {" +
                        "name: 'Semana'," +
                        "categories: [" + categories_semana + "]," +
                        "data: [" + values_semana + "]," +
                        "color: colors[0]" +
                    "}}," +
                    "{y: " + mes.ToString() + "," +
                    "color: colors[1], " +
                    "drilldown: {" +
                        "name: 'Mes'," +
                        "categories: [" + categories_mes + "]," +
                        "data: [" + values_mes + "]," +
                        "color: colors[1]" +
                    "}}," +
                    "{y: " + anio.ToString() + "," +
                    "color: colors[2], " +
                    "drilldown: {" +
                        "name: 'Mes'," +
                        "categories: [" + categories_anio + "]," +
                        "data: [" + values_anio + "]," +
                        "color: colors[2]" +
                    "}}," +
                    "{y: " + total.ToString() + "," +
                    "color: colors[3], " +
                    "drilldown: {" +
                        "name: 'Mes'," +
                        "categories: [" + categories_total + "]," +
                        "data: [" + values_total + "]," +
                        "color: colors[3]" +
                    "}}" +
                "]" +
            "}" +
        ");";

    }

    private void bind_desasociaciones_empresa(long semana, Dictionary<string, long> semana_drill,
                                           long mes, Dictionary<string, long> mes_drill,
                                           long anio, Dictionary<string, long> anio_drill,
                                           long total, Dictionary<string, long> total_drill)
    {

        string categories_semana = string.Empty;
        string values_semana = string.Empty;

        foreach (var i in semana_drill)
        {
            if (string.IsNullOrEmpty(categories_semana))
            {
                categories_semana += "'" + i.Key + "'";
                values_semana += i.Value.ToString();
            }
            else
            {
                categories_semana += ",'" + i.Key + "'";
                values_semana += "," + i.Value.ToString();
            }
        }

        string categories_mes = string.Empty;
        string values_mes = string.Empty;

        foreach (var i in mes_drill)
        {
            if (string.IsNullOrEmpty(categories_mes))
            {
                categories_mes += "'" + i.Key + "'";
                values_mes += i.Value.ToString();
            }
            else
            {
                categories_mes += ",'" + i.Key + "'";
                values_mes += "," + i.Value.ToString();
            }
        }

        string categories_anio = string.Empty;
        string values_anio = string.Empty;

        foreach (var i in anio_drill)
        {
            if (string.IsNullOrEmpty(categories_anio))
            {
                categories_anio += "'" + i.Key + "'";
                values_anio += i.Value.ToString();
            }
            else
            {
                categories_anio += ",'" + i.Key + "'";
                values_anio += "," + i.Value.ToString();
            }
        }

        string categories_total = string.Empty;
        string values_total = string.Empty;

        foreach (var i in total_drill)
        {
            if (string.IsNullOrEmpty(categories_total))
            {
                categories_total += "'" + i.Key + "'";
                values_total += i.Value.ToString();
            }
            else
            {
                categories_total += ",'" + i.Key + "'";
                values_total += "," + i.Value.ToString();
            }
        }

        data +=
            "dataArray.push(" +
            "{ " +
                "type: 'column', " +
                "container: 'desasociaciones_empresa'," +
                "title: 'Desasociaciones a la empresa <span class=\"tooltip\" alt=\"Aquí se muestran las bajas de seguidores que tuvo la empresa en distintos períodos. &lt;br /&gt;Podés ver como estos están compuestos para analizarlos mejor haciendo click en un período en particular\">?</span>'," +
                "categories : ['Semana', 'Mes', 'Año', 'Total']," +
                "name: 'Desasociaciones'," +
                "data : [" +
                    "{y: " + semana.ToString() + "," +
                    "color: colors[0], " +
                    "drilldown: {" +
                        "name: 'Semana'," +
                        "categories: [" + categories_semana + "]," +
                        "data: [" + values_semana + "]," +
                        "color: colors[0]" +
                    "}}," +
                    "{y: " + mes.ToString() + "," +
                    "color: colors[1], " +
                    "drilldown: {" +
                        "name: 'Mes'," +
                        "categories: [" + categories_mes + "]," +
                        "data: [" + values_mes + "]," +
                        "color: colors[1]" +
                    "}}," +
                    "{y: " + anio.ToString() + "," +
                    "color: colors[2], " +
                    "drilldown: {" +
                        "name: 'Mes'," +
                        "categories: [" + categories_anio + "]," +
                        "data: [" + values_anio + "]," +
                        "color: colors[2]" +
                    "}}," +
                    "{y: " + total.ToString() + "," +
                    "color: colors[3], " +
                    "drilldown: {" +
                        "name: 'Mes'," +
                        "categories: [" + categories_total + "]," +
                        "data: [" + values_total + "]," +
                        "color: colors[3]" +
                    "}}" +
                "]" +
            "}" +
        ");";

    }

    private void bind_seguimiento_publicaciones(Dictionary<string, long> seguimiento_publicaciones)
    {
        string datos = string.Empty;

        string idmax = string.Empty;
        long max = 0;
        long total = 0;
        foreach (var s in seguimiento_publicaciones)
        {
            if (s.Value > max)
            {
                idmax = s.Key;
                max = s.Value;
            }
            total += s.Value;
        }

        foreach (var s in seguimiento_publicaciones)
        {
            if (!string.IsNullOrEmpty(datos))
                datos += ",";

            if (idmax == s.Key)
            {

                datos += "{" +
                            "name: '" + s.Key + "'," +
                            "y: " + (s.Value * 100 / total).ToString().Replace(",",".") + "," +
                            "sliced: true," +
                            "selected: true" +
                        "}";
            }
            else
            {
                datos += "['" + s.Key + "'," + (s.Value * 100 / total).ToString().Replace(",", ".") + "]";
            }
        }


        data += "dataArray.push(" +
                "{" +
                    "type: 'pie'," +
                    "container: 'seguimiento_publicaciones'," +
                    "title: 'Seguimiento de publicaciones <span class=\"tooltip\" alt=\"Este gráfico indica como es la distribución del seguimiento que se le da a las publicaciones realizadas por parte de los usuarios. &lt;br /&gt;Esto te da una mejor idea de cuáles son los más interesantes, exitosos o influyentes\">?</span>'," +
                    "data: [" +
                            datos +
                        "]" +
                    "}" +
                ");";
    }

    private void bind_uso_publicaciones(Dictionary<string, long> uso_publicaciones)
    {
        string datos = string.Empty;

        string idmax = string.Empty;
        long max = 0;
        long total = 0;
        foreach (var s in uso_publicaciones)
        {
            if (s.Value > max)
            {
                idmax = s.Key;
                max = s.Value;
            }
            total += s.Value;
        }

        foreach (var s in uso_publicaciones)
        {
            if (!string.IsNullOrEmpty(datos))
                datos += ",";

            if (idmax == s.Key)
            {

                datos += "{" +
                            "name: '" + s.Key + "'," +
                            "y: " + (s.Value * 100 / total).ToString().Replace(",", ".") + "," +
                            "sliced: true," +
                            "selected: true" +
                        "}";
            }
            else
            {
                datos += "['" + s.Key + "'," + (s.Value * 100 / total).ToString().Replace(",", ".") + "]";
            }
        }


        data += "dataArray.push(" +
                "{" +
                    "type: 'pie'," +
                    "container: 'uso_publicaciones'," +
                    "title: 'Uso de publicaciones <span class=\"tooltip\" alt=\"Este gráfico indica como es la distribución del uso que se le da a las publicaciones realizadas por parte de los usuarios. &lt;br /&gt;Esto te da una mejor idea de cuáles son los más interesantes, exitosos o influyentes\">?</span>'," +
                    "data: [" +
                            datos +
                        "]" +
                    "}" +
                ");";
    }
    

}
